package BaseUse;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test_01 {
    public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException, NoSuchMethodException {
        Class c1 = Class.forName("com. kuang.reflection.User");
        //1.获得类的名字
        System.out.println(c1.getName()); //获得包名 +类名
        System.out.println (c1.getSimpleName()); // 获得类名
        //2.获得类的属性
        System.out.println("=============================");
        Field[] fields = c1.getFields(); //只能找到public属性
        fields = c1.getDeclaredFields(); //找到全部的属性
        for (Field field : fields) {
            System.out.println(field);
        }
        //3.获得指定属性的值
        Field name = c1.getDeclaredField("name!");
        System.out.println(name);
        //4.获得类的方法
        System.out.println("===============================");
        Method[] methods = c1.getMethods();//获得本类及其父类的所有public的方法
        methods = c1.getDeclaredMethods();//获得本类所有方法包括private
        //5.获得指定方法
        //重载
        Method getName = c1.getMethod("getName",null) ;
        //传入一个setName需要参数String，这里也需要标识出来，因为有重载的问题
        Method setName = c1.getMethod ("setName",String.class);
        System. out. println(getName) ;
        System. out. println(setName) ;
        //6.获得指定的构造器
        System. out . println("===============================");
        Constructor [] constructors = c1. getConstructors() ;//获得public构造器，构造方法
            constructors = c1.getDeclaredConstructors() ;//获得所有构造器，构造方法
        //7.获得指定的构造器
        Constructor declaredConstructor = c1.getDeclaredConstructor(String.class,int.class,int.class) ;
        System. out . println("指定:"+declaredConstructor);

    }
}
